package com.jeff.practice;

//合并两个有序数组,将其合并到第一个数组中,第一个数组的长度已经足够大,不需要考虑扩容问题。
public class Test8 {
    public static void main(String[] args) {
        int[] array1 = {1, 4, 7, 0, 0, 0, 0};
        int[] array2 = {2, 3, 5, 6};
        merge(array1, 3, array2, 4);
        for (int i = 0; i < array1.length; i++) {
            System.out.print(array1[i] + " ");
        }
    }

    /**
     * 合并两个有序数组
     *
     * @param array1 目标源
     * @param m
     * @param array2 待合并数组
     * @param n
     */
    public static void merge(int[] array1, int m, int[] array2, int n) {
        int i = m - 1; //目标源
        int j = n - 1;//待合并
        while (i >= 0 && j >= 0) {
            // 比较两个数组的元素,将较大的元素放在目标数组的相应位置
            if (array1[i] > array2[j]) {
                array1[i + j + 1] = array1[i];
                i--;
            }
            else {
                array1[i + j + 1] = array2[j];
                j--;
            }
        }
        while (j >= 0) {
            array1[j] = array2[j];
            j--;
        }
        while (i >= 0) {
            i--;
        }

    }
}

